{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Softmax exercise\n",
    "\n",
    "*Complete and hand in this completed worksheet (including its outputs and any supporting code outside of the worksheet) with your assignment submission. For more details see the [assignments page](http://vision.stanford.edu/teaching/cs231n/assignments.html) on the course website.*\n",
    "\n",
    "This exercise is analogous to the SVM exercise. You will:\n",
    "\n",
    "- implement a fully-vectorized **loss function** for the Softmax classifier\n",
    "- implement the fully-vectorized expression for its **analytic gradient**\n",
    "- **check your implementation** with numerical gradient\n",
    "- use a validation set to **tune the learning rate and regularization** strength\n",
    "- **optimize** the loss function with **SGD**\n",
    "- **visualize** the final learned weights\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import random\n",
    "import numpy as np\n",
    "from cs231n.data_utils import load_CIFAR10\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from __future__ import print_function\n",
    "\n",
    "%matplotlib inline\n",
    "plt.rcParams['figure.figsize'] = (10.0, 8.0) # set default size of plots\n",
    "plt.rcParams['image.interpolation'] = 'nearest'\n",
    "plt.rcParams['image.cmap'] = 'gray'\n",
    "\n",
    "# for auto-reloading extenrnal modules\n",
    "# see http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython\n",
    "%load_ext autoreload\n",
    "%autoreload 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train data shape:  (49000, 3073)\n",
      "Train labels shape:  (49000,)\n",
      "Validation data shape:  (1000, 3073)\n",
      "Validation labels shape:  (1000,)\n",
      "Test data shape:  (1000, 3073)\n",
      "Test labels shape:  (1000,)\n",
      "dev data shape:  (500, 3073)\n",
      "dev labels shape:  (500,)\n"
     ]
    }
   ],
   "source": [
    "def get_CIFAR10_data(num_training=49000, num_validation=1000, num_test=1000, num_dev=500):\n",
    "    \"\"\"\n",
    "    Load the CIFAR-10 dataset from disk and perform preprocessing to prepare\n",
    "    it for the linear classifier. These are the same steps as we used for the\n",
    "    SVM, but condensed to a single function.  \n",
    "    \"\"\"\n",
    "    # Load the raw CIFAR-10 data\n",
    "    cifar10_dir = 'cs231n/datasets/cifar-10-batches-py'\n",
    "    X_train, y_train, X_test, y_test = load_CIFAR10(cifar10_dir)\n",
    "    \n",
    "    # subsample the data\n",
    "    mask = list(range(num_training, num_training + num_validation))\n",
    "    X_val = X_train[mask]\n",
    "    y_val = y_train[mask]\n",
    "    mask = list(range(num_training))\n",
    "    X_train = X_train[mask]\n",
    "    y_train = y_train[mask]\n",
    "    mask = list(range(num_test))\n",
    "    X_test = X_test[mask]\n",
    "    y_test = y_test[mask]\n",
    "    mask = np.random.choice(num_training, num_dev, replace=False)\n",
    "    X_dev = X_train[mask]\n",
    "    y_dev = y_train[mask]\n",
    "    \n",
    "    # Preprocessing: reshape the image data into rows\n",
    "    X_train = np.reshape(X_train, (X_train.shape[0], -1))\n",
    "    X_val = np.reshape(X_val, (X_val.shape[0], -1))\n",
    "    X_test = np.reshape(X_test, (X_test.shape[0], -1))\n",
    "    X_dev = np.reshape(X_dev, (X_dev.shape[0], -1))\n",
    "    \n",
    "    # Normalize the data: subtract the mean image\n",
    "    mean_image = np.mean(X_train, axis = 0)\n",
    "    X_train -= mean_image\n",
    "    X_val -= mean_image\n",
    "    X_test -= mean_image\n",
    "    X_dev -= mean_image\n",
    "    \n",
    "    # add bias dimension and transform into columns\n",
    "    X_train = np.hstack([X_train, np.ones((X_train.shape[0], 1))])\n",
    "    X_val = np.hstack([X_val, np.ones((X_val.shape[0], 1))])\n",
    "    X_test = np.hstack([X_test, np.ones((X_test.shape[0], 1))])\n",
    "    X_dev = np.hstack([X_dev, np.ones((X_dev.shape[0], 1))])\n",
    "    \n",
    "    return X_train, y_train, X_val, y_val, X_test, y_test, X_dev, y_dev\n",
    "\n",
    "\n",
    "# Invoke the above function to get our data.\n",
    "X_train, y_train, X_val, y_val, X_test, y_test, X_dev, y_dev = get_CIFAR10_data()\n",
    "print('Train data shape: ', X_train.shape)\n",
    "print('Train labels shape: ', y_train.shape)\n",
    "print('Validation data shape: ', X_val.shape)\n",
    "print('Validation labels shape: ', y_val.shape)\n",
    "print('Test data shape: ', X_test.shape)\n",
    "print('Test labels shape: ', y_test.shape)\n",
    "print('dev data shape: ', X_dev.shape)\n",
    "print('dev labels shape: ', y_dev.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Softmax Classifier\n",
    "\n",
    "Your code for this section will all be written inside **cs231n/classifiers/softmax.py**. \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loss: 2.295543\n",
      "sanity check: 2.302585\n"
     ]
    }
   ],
   "source": [
    "# First implement the naive softmax loss function with nested loops.\n",
    "# Open the file cs231n/classifiers/softmax.py and implement the\n",
    "# softmax_loss_naive function.\n",
    "\n",
    "from cs231n.classifiers.softmax import softmax_loss_naive\n",
    "import time\n",
    "\n",
    "# Generate a random softmax weight matrix and use it to compute the loss.\n",
    "W = np.random.randn(3073, 10) * 0.0001\n",
    "loss, grad = softmax_loss_naive(W, X_dev, y_dev, 0.0)\n",
    "\n",
    "# As a rough sanity check, our loss should be something close to -log(0.1).\n",
    "print('loss: %f' % loss)\n",
    "print('sanity check: %f' % (-np.log(0.1)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Inline Question 1:\n",
    "Why do we expect our loss to be close to -log(0.1)?\n",
    "\n",
    "**Your answer:** because we have 10 classes so 0.1 chance of random guess each class, our loss is giving unnormalised negative log probabilities of each class so should be close to -log(0.1) at the start (random guess). \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "numerical: 2.098190 analytic: 2.098190, relative error: 2.516374e-08\n",
      "numerical: -1.513118 analytic: -1.513118, relative error: 2.598024e-08\n",
      "numerical: 0.717283 analytic: 0.717283, relative error: 6.570907e-09\n",
      "numerical: 1.623284 analytic: 1.623284, relative error: 3.792055e-09\n",
      "numerical: 0.270620 analytic: 0.270620, relative error: 3.842244e-08\n",
      "numerical: 0.776223 analytic: 0.776223, relative error: 6.287574e-08\n",
      "numerical: 0.776549 analytic: 0.776549, relative error: 2.737801e-08\n",
      "numerical: -2.004515 analytic: -2.004515, relative error: 8.135252e-09\n",
      "numerical: -0.059178 analytic: -0.059178, relative error: 7.577848e-07\n",
      "numerical: -2.326653 analytic: -2.326653, relative error: 1.213029e-08\n",
      "numerical: -3.669423 analytic: -3.669423, relative error: 2.070638e-08\n",
      "numerical: 0.375872 analytic: 0.375872, relative error: 6.354884e-08\n",
      "numerical: 2.083876 analytic: 2.083875, relative error: 5.531821e-09\n",
      "numerical: 0.887177 analytic: 0.887177, relative error: 4.002602e-08\n",
      "numerical: 0.681670 analytic: 0.681669, relative error: 5.236743e-08\n",
      "numerical: -0.560241 analytic: -0.560241, relative error: 1.206287e-07\n",
      "numerical: 0.223829 analytic: 0.223829, relative error: 1.496284e-07\n",
      "numerical: 0.230128 analytic: 0.230128, relative error: 3.114700e-08\n",
      "numerical: 1.049608 analytic: 1.049608, relative error: 3.461916e-10\n",
      "numerical: -1.972799 analytic: -1.972800, relative error: 1.240476e-08\n"
     ]
    }
   ],
   "source": [
    "# Complete the implementation of softmax_loss_naive and implement a (naive)\n",
    "# version of the gradient that uses nested loops.\n",
    "loss, grad = softmax_loss_naive(W, X_dev, y_dev, 0.0)\n",
    "\n",
    "# As we did for the SVM, use numeric gradient checking as a debugging tool.\n",
    "# The numeric gradient should be close to the analytic gradient.\n",
    "from cs231n.gradient_check import grad_check_sparse\n",
    "f = lambda w: softmax_loss_naive(w, X_dev, y_dev, 0.0)[0]\n",
    "grad_numerical = grad_check_sparse(f, W, grad, 10)\n",
    "\n",
    "# similar to SVM case, do another gradient check with regularization\n",
    "loss, grad = softmax_loss_naive(W, X_dev, y_dev, 1e2)\n",
    "f = lambda w: softmax_loss_naive(w, X_dev, y_dev, 1e2)[0]\n",
    "grad_numerical = grad_check_sparse(f, W, grad, 10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "naive loss: 2.295543e+00 computed in 0.093760s\n",
      "vectorized loss: 2.295543e+00 computed in 0.000000s\n",
      "Loss difference: 0.000000\n",
      "Gradient difference: 0.000000\n"
     ]
    }
   ],
   "source": [
    "# Now that we have a naive implementation of the softmax loss function and its gradient,\n",
    "# implement a vectorized version in softmax_loss_vectorized.\n",
    "# The two versions should compute the same results, but the vectorized version should be\n",
    "# much faster.\n",
    "tic = time.time()\n",
    "loss_naive, grad_naive = softmax_loss_naive(W, X_dev, y_dev, 0.000005)\n",
    "toc = time.time()\n",
    "print('naive loss: %e computed in %fs' % (loss_naive, toc - tic))\n",
    "\n",
    "from cs231n.classifiers.softmax import softmax_loss_vectorized\n",
    "tic = time.time()\n",
    "loss_vectorized, grad_vectorized = softmax_loss_vectorized(W, X_dev, y_dev, 0.000005)\n",
    "toc = time.time()\n",
    "print('vectorized loss: %e computed in %fs' % (loss_vectorized, toc - tic))\n",
    "\n",
    "# As we did for the SVM, we use the Frobenius norm to compare the two versions\n",
    "# of the gradient.\n",
    "grad_difference = np.linalg.norm(grad_naive - grad_vectorized, ord='fro')\n",
    "print('Loss difference: %f' % np.abs(loss_naive - loss_vectorized))\n",
    "print('Gradient difference: %f' % grad_difference)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lr 1.000000e-07 reg 2.500000e+04 train accuracy: 0.308857 val accuracy: 0.321000\n",
      "lr 1.000000e-07 reg 3.750000e+04 train accuracy: 0.319306 val accuracy: 0.337000\n",
      "lr 1.000000e-07 reg 5.000000e+04 train accuracy: 0.313204 val accuracy: 0.332000\n",
      "lr 3.000000e-07 reg 2.500000e+04 train accuracy: 0.334796 val accuracy: 0.343000\n",
      "lr 3.000000e-07 reg 3.750000e+04 train accuracy: 0.323327 val accuracy: 0.337000\n",
      "lr 3.000000e-07 reg 5.000000e+04 train accuracy: 0.290122 val accuracy: 0.302000\n",
      "lr 5.000000e-07 reg 2.500000e+04 train accuracy: 0.321082 val accuracy: 0.339000\n",
      "lr 5.000000e-07 reg 3.750000e+04 train accuracy: 0.310592 val accuracy: 0.320000\n",
      "lr 5.000000e-07 reg 5.000000e+04 train accuracy: 0.303286 val accuracy: 0.314000\n",
      "best validation accuracy achieved during cross-validation: 0.343000\n"
     ]
    }
   ],
   "source": [
    "# Use the validation set to tune hyperparameters (regularization strength and\n",
    "# learning rate). You should experiment with different ranges for the learning\n",
    "# rates and regularization strengths; if you are careful you should be able to\n",
    "# get a classification accuracy of over 0.35 on the validation set.\n",
    "from cs231n.classifiers import Softmax\n",
    "results = {}\n",
    "best_val = -1\n",
    "best_softmax = None\n",
    "learning_rates = [1e-7, 5e-7]\n",
    "regularization_strengths = [2.5e4, 5e4]\n",
    "\n",
    "################################################################################\n",
    "# TODO:                                                                        #\n",
    "# Use the validation set to set the learning rate and regularization strength. #\n",
    "# This should be identical to the validation that you did for the SVM; save    #\n",
    "# the best trained softmax classifer in best_softmax.                          #\n",
    "################################################################################\n",
    "range_lr = np.linspace(learning_rates[0],learning_rates[1],3)\n",
    "range_reg = np.linspace(regularization_strengths[0],regularization_strengths[1],3)\n",
    "\n",
    "for cur_lr in range_lr: # Go over the learning rates\n",
    "    for cur_reg in range_reg: # Go over the regularization strengths\n",
    "        \n",
    "        softmax = Softmax()\n",
    "        softmax.train(X_train, y_train, learning_rate=cur_lr, reg=cur_reg,\n",
    "                      num_iters=500, verbose=False)\n",
    "        \n",
    "        y_train_pred = softmax.predict(X_train)\n",
    "        train_acc = np.mean(y_train == y_train_pred)\n",
    "        \n",
    "        y_val_pred = softmax.predict(X_val)\n",
    "        val_acc = np.mean(y_val == y_val_pred)\n",
    "        \n",
    "        # Store our results in a dict.\n",
    "        results[(cur_lr,cur_reg)] = (train_acc,val_acc)\n",
    "\n",
    "        if val_acc > best_val:\n",
    "            best_val = val_acc\n",
    "            best_softmax = softmax\n",
    "\n",
    "################################################################################\n",
    "#                              END OF YOUR CODE                                #\n",
    "################################################################################\n",
    "    \n",
    "# Print out results.\n",
    "for lr, reg in sorted(results):\n",
    "    train_accuracy, val_accuracy = results[(lr, reg)]\n",
    "    print('lr %e reg %e train accuracy: %f val accuracy: %f' % (\n",
    "                lr, reg, train_accuracy, val_accuracy))\n",
    "    \n",
    "print('best validation accuracy achieved during cross-validation: %f' % best_val)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "softmax on raw pixels final test set accuracy: 0.351000\n"
     ]
    }
   ],
   "source": [
    "# evaluate on test set\n",
    "# Evaluate the best softmax on test set\n",
    "y_test_pred = best_softmax.predict(X_test)\n",
    "test_accuracy = np.mean(y_test == y_test_pred)\n",
    "print('softmax on raw pixels final test set accuracy: %f' % (test_accuracy, ))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlMAAAF8CAYAAADrUz6WAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXm0ZOtZ3ve83x6q6pzuvhqIbSQkOUAgZoqwgzGJzbzA\ngAmyiHEIhggbYifIQJyYwVEc2QjLwYBjQmJjzLACiElWGGJWFosFicFDHDPG4KUARiMyRki6t7tP\nVe3pyx91bn+/fTi3723tOqevuM9vrbtudZ0a9t7fsL96n+9538g5yxhjjDHGvHukh30AxhhjjDHv\nyXgxZYwxxhizAC+mjDHGGGMW4MWUMcYYY8wCvJgyxhhjjFmAF1PGGGOMMQvwYkpSRHxsRLzlYR+H\nMaYQEW+IiE+85Pk/EhGvf8DP+vaIeNXxjs4YI3lsPY4XU8aY9yhyzj+Zc/7Ah30c5np5osW1MU8H\nvJgy5gmIiPphH4N5MNxmxrzn8544jp9Ri6nzXzZfGRG/FBHvjIhvi4j1Ja/7ioj41Yi4ff7aP46/\nvSwifioivvb8M34tIj4Ff38kIr4lIt4WEW+NiFdFRHVd52gKEfGCiHhdRPxmRPxWRHxjRLxfRPz4\n+b/fHhHfFRHPwnveEBFfHhG/IOnue+Kg/h3GR1wcrxdl+cvaLCI+PCJ+5nwMf6+k3zbOzcPjQcdm\nRHyHpBdK+uGIuBMRX/Zwz+CZy/3GVkT8sYj4uYh4V0T844j4MPzteRHx98/b/Nci4ovxt1dGxGsj\n4jsj4jFJL7vWkzoCz6jF1DmfI+mTJb2fpA+Q9IpLXvOrkv6IpEck/RVJ3xkR742/f6Sk10t6L0lf\nI+lbIiLO//btkgZJ7y/pwyV9kqQvOPpZmPtyvoD93yW9UdLvlfR8Sd8jKSS9WtLzJP0+SS+Q9MoL\nb/9sSZ8m6Vk55+F6jtg8AU9lvEpoMx3mtR+Q9B2SniPp+yV95pUfqXlKvDtjM+f8uZLeJOnTc843\ncs5fc+0HbhQRrZ5gbEXEh0v6Vkl/VtJzJX2TpB+KiFVEJEk/LOnndWjvT5D0pRHxyfj4z5D0Wh3G\n8Hddywkdk5zzM+Y/SW+Q9Ofw70/VYeH0sZLecp/3/Zykzzh//DJJv4K/nUjKkn6PpN8taS9pg79/\ntqSfeNjn/kz7T9JHSfpNSfWTvO4lkn72Qh/50w/7+P3fUx+vF9tM0kdL+nVJgef+saRXPexz8n+L\nx+YnPuzjfyb/d7+xJelvS/qqC69/vaSP0SEA8aYLf/tKSd92/viVkv7hwz6/Jf89EyWMN+PxG3X4\nFTQjIj5P0l/Q4VeTJN3QIQr1OP/68Qc557PzoNQNHVbqjaS3lUCV0oXvNNfDCyS9MV+ILEXE75b0\nt3SIPN7UoX3eeeG9bq+nD086Xi953fMkvTWfz9J4r3l6sGRsmofL/cbWiyT9ZxHx5/G39vw9o6Tn\nRcS78LdK0k/i3+/R8+4zUeZ7AR6/UIdV9j0i4kWSvlnSyyU9N+f8LEn/QocQ9JPxZh0iU++Vc37W\n+X+3cs4ffJxDNw/AmyW98JI9T39Nh0jih+acb0n6U/rtbZtlni7cd7wCttnbJD0f0vvj7zVPD97d\nselx+fC539h6s6Svxr3vWTnnk5zzd5//7dcu/O1mzvlT8Tnv0e37TFxMfVFEvE9EPEfSfyvpey/8\n/VSHRv1NSYqIz5f0IU/lg3POb5P0o5K+LiJuRUQ631T5Mcc7fPMU+Wc6DPy/HhGn5xuX/0MdfvHe\nkfRoRDxf0l98mAdpnpQnG6+X8U902Lf4xRHRRMRLJf3BqzxI80C8u2PzNyS97/UeqrnA/cbWN0v6\ncxHxkXHgNCI+LSJu6tDmt8+NIpuIqCLiQyLiIx7SeRydZ+Ji6jU6LHj+lQ77L2bJxnLOvyTp63To\nNL8h6UMl/aMH+PzP0yG0+Us6hKhfK+m97/sOc3RyzqOkT9fBCPAmSW+R9Cd1MBT8fkmPSvoHkl73\nsI7RPCXuO14vI+fcSXqpDvsb36FDu7udnyYsGJuvlvSKc6fYf3N9R2we535jK+f8zyV9oaRv1OHe\n9yvnr3u8zf+YpBdL+jVJb5f093Qwef2OIObS5+9sIuINkr4g5/xjD/tYjDHGGPM7g2diZMoYY4wx\n5mh4MWWMMcYYs4BnlMxnjDHGGHNsHJkyxhhjjFnAtSbtfPnX/vS9MFjSdO/5YVceT4iUMZVF5mOV\nXG9jj8gaSuBNdXm+ifJ4nMr6MU/le1PCuhIZNEa8ZhzL48MHlPekBm/Cw2rierUcR47yfMX0GgwU\nJlyLXL47qtJsNb5rwnm2qfyhadp7j//Gl774qeTLelK+/su+orRl8DqUNshj+aoRbZZxgaapL++N\n5t7jCtUMW5xkVOU1DV602ZTSa3d3PV5fXlOxifO8LfuRx1de2KTyuQ2OI+H6TgP6Mj422HfQfytc\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x2084567a940>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Visualize the learned weights for each class\n",
    "w = best_softmax.W[:-1,:] # strip out the bias\n",
    "w = w.reshape(32, 32, 3, 10)\n",
    "\n",
    "w_min, w_max = np.min(w), np.max(w)\n",
    "\n",
    "classes = ['plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']\n",
    "for i in range(10):\n",
    "    plt.subplot(2, 5, i + 1)\n",
    "    \n",
    "    # Rescale the weights to be between 0 and 255\n",
    "    wimg = 255.0 * (w[:, :, :, i].squeeze() - w_min) / (w_max - w_min)\n",
    "    plt.imshow(wimg.astype('uint8'))\n",
    "    plt.axis('off')\n",
    "    plt.title(classes[i])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
